package aventuraespacial;







/**
 * Todas las balas son basicamente iguales, solamente cambia la forma en que generan una nueva instancia, como se guardan en la nave, como se dibujan y si se encuentran fuera de la pantalla o no. Lo importante a resaltar, es que cada clase por mas que se llamen BALA TRIPLE, representa una sola bala, lo unico que hace es crear 3 BALA TRIPLE y agregarlas a la lista,  esto provee una mayor flexibilidad al codigo para que puedan ser tratadas  independientemente.
 */
public abstract class Bala extends ObjetoEspacial{
    
	/******************************* CONSTANTES DE CLASE ***************************/
	
	static final int ANCHO_BALA=5;
	static final int ALTO_BALA=5;
	static final int SIN_RANGO=50;
	
	/**
	 * @uml.property  name="imagenBala"
	 */
	
          
    /******************************* CONSTRUCTOR DE BALA ***************************/
	
    public Bala(double x, double y, double velocidad, double angulo){
    	
        this.setAngulo(angulo);
        this.setX(x);
        this.setY(y);
        this.setVelocidad(velocidad);
        this.setVivo(true);
        
        this.setVivo(true);
    }
    
    
    
    /**
	 * METODOS DE CLASE
	 * @uml.property  name="imagenBala"
	 */ 
    
    
    


	/**
	 * @param imagenBala
	 * @uml.property  name="imagenBala"
	 */
	
    
    
    /******************************* METODOS ABSTRACTOS ****************************/
    
    public abstract Bala identidad();   
    public abstract void guardarseEnNave(Nave nave);    
    public abstract int getAncho();
    public abstract int getAlto();
    public abstract void establecerModeloNave(Nave nave);
    public abstract void impactarCon(ObjetoEspacial obj);
    public abstract int getRango();
    //sirve para graficar el icono correcto en el paquete de balas
    public abstract String getNombreIcono();
    
    
    /******************** IMPLEMENTACION METODOS ABSTRACTOS ****************************/
    
    @Override
    public double calcDirX(){
		return (double) (Math.cos(angulo*Math.PI/180));
	}
    @Override
    public double calcDirY(){
		return (double) (Math.sin(angulo*Math.PI/180));
	}


	
    
   
}
